package com.itheima.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.pojo.Approval;
import com.itheima.pojo.Result;
import com.itheima.service.ApprovalService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/approval")
public class ApprovalController {
    @Autowired
    private ApprovalService approvalService;
    @PostMapping("/add")
    public Result add(@RequestBody Approval approval) {
        approvalService.save(approval);
        return Result.success("成功");
    }

    @GetMapping("/list")
    public Result<Page> page(Integer page, Integer pagesize, String applicant, Integer type, Integer status, Integer applicantId) {
        Page page1 = new Page(page, pagesize);
        return approvalService.selectPage(page1, applicant, type, status, applicantId);
    }
    @DeleteMapping("/delete/{id}")
    public Result delete(@PathVariable Long id) {
        approvalService.removeById(id);
        return Result.success("成功");
    }
    // 获取审批信息
    @GetMapping("/detail/{id}")
    public Result getApprovalById(@PathVariable Long id) {
        // 根据 ID 查询审批信息
        Approval approval = approvalService.getById(id);

        // 如果没有找到对应的审批信息，返回错误信息
        if (approval == null) {
            return Result.error("未找到该审批信息");
        }

        // 返回成功的响应，包含审批信息
        return Result.success(approval);
    }

    @PutMapping("/put/approve/{id}")
    public Result update(@PathVariable Long id, @RequestBody Approval approval) {
        // 校验 ID 是否匹配
        if (id == null) {
            return Result.error("请求的ID与数据中ID不一致");
        }
        // 通过 ID 获取已有的审批记录
        Approval existingApproval = approvalService.getById(id);

        // 判断该记录是否存在
        if (existingApproval != null) {
            // 如果记录存在，设置审批状态为已审批
            existingApproval.setStatus(1);

            // 更新审批记录到数据库
            boolean isUpdated = approvalService.updateById(existingApproval);

            // 判断更新操作是否成功
            if (isUpdated) {
                // 如果更新成功，返回成功结果
                return Result.success("成功");
            } else {
                // 如果更新失败，返回失败结果
                return Result.error("更新失败");
            }
        } else {
            // 如果记录不存在，返回记录不存在的错误信息
            return Result.error("审批记录不存在");
        }
    }
    @PutMapping("/put/reject/{id}")
    public Result update1(@PathVariable Long id, @RequestBody Approval approval) {
        // 校验 ID 是否匹配
        if (id == null) {
            return Result.error("请求的ID与数据中ID不一致");
        }
        // 通过 ID 获取已有的审批记录
        Approval existingApproval = approvalService.getById(id);

        // 判断该记录是否存在
        if (existingApproval != null) {
            // 如果记录存在，设置审批状态为已拒绝
            existingApproval.setStatus(2);

            // 更新审批记录到数据库
            boolean isUpdated = approvalService.updateById(existingApproval);

            // 判断更新操作是否成功
            if (isUpdated) {
                // 如果更新成功，返回成功结果
                return Result.success("成功");
            } else {
                // 如果更新失败，返回失败结果
                return Result.error("更新失败");
            }
        } else {
            // 如果记录不存在，返回记录不存在的错误信息
            return Result.error("审批记录不存在");
        }
    }
    @PutMapping("/put/callback/{id}")
    public Result update2(@PathVariable Long id, @RequestBody Approval approval) {
        // 校验 ID 是否匹配
        if (id == null) {
            return Result.error("请求的ID与数据中ID不一致");
        }
        // 通过 ID 获取已有的审批记录
        Approval existingApproval = approvalService.getById(id);

        // 判断该记录是否存在
        if (existingApproval != null) {
            // 如果记录存在，设置审批状态为已撤销
            existingApproval.setStatus(3);

            // 更新审批记录到数据库
            boolean isUpdated = approvalService.updateById(existingApproval);

            // 判断更新操作是否成功
            if (isUpdated) {
                // 如果更新成功，返回成功结果
                return Result.success("成功");
            } else {
                // 如果更新失败，返回失败结果
                return Result.error("更新失败");
            }
        } else {
            // 如果记录不存在，返回记录不存在的错误信息
            return Result.error("审批记录不存在");
        }
    }
}
